البرمجة

فهم الـ Tuples في بايثون

فهم نوع البيانات Tuples في بايثون 3

تُعتبر الـ Tuples (التي تُترجم في العربية إلى “الثنائيات”) من أهم أنواع البيانات في لغة البرمجة بايثون، وتستخدم في مجموعة متنوعة من التطبيقات البرمجية. تمثل الـ Tuples مجموعة من العناصر المترابطة التي يتم تخزينها معًا في ترتيب معين، ويمكن أن تكون هذه العناصر من أنواع بيانات مختلفة. يتميز الـ Tuple بالعديد من الخصائص التي تجعله أداة قوية للمطورين، سواء كان ذلك في التعامل مع البيانات الثابتة أو في تحسين أداء البرنامج. في هذا المقال، سنتناول كل ما يتعلق بـ Tuples في بايثون 3، من تعريفها إلى تطبيقاتها المختلفة، بالإضافة إلى خصائصها وكيفية التعامل معها.

1. ما هو الـ Tuple في بايثون؟

الـ Tuple هو نوع بيانات مدمج (أو هيكل بيانات) في بايثون، مشابه للقوائم (Lists)، لكن مع فارق أساسي وهو أن الـ Tuple ثابت لا يمكن تغييره بعد إنشائه. يُستخدم الـ Tuple لتخزين مجموعة من العناصر التي يمكن أن تكون متجانسة أو غير متجانسة.

يتم تعريف الـ Tuple باستخدام قوسين دائريين ()، حيث تُفصل العناصر بواسطة الفاصلة ,. على سبيل المثال:

python
my_tuple = (1, 2, 3, 4)

الـ Tuple يمكن أن يحتوي على أنواع بيانات متعددة مثل الأعداد الصحيحة، الأرقام العشرية، السلاسل النصية، وحتى أنواع بيانات معقدة مثل القوائم أو الـ dictionaries.

2. الخصائص الرئيسية للـ Tuple

الـ Tuple في بايثون يتمتع بعدد من الخصائص التي تميزه عن الأنواع الأخرى مثل القوائم. من أهم هذه الخصائص:

  • الثبات: على عكس القوائم، التي يمكن تعديل عناصرها بعد إنشائها، لا يمكن تغيير محتويات الـ Tuple بعد تعريفه. أي أنه لا يمكن إضافة أو حذف عناصر من الـ Tuple بعد إنشائه.

  • الترتيب: الـ Tuple يحفظ ترتيب العناصر، ويمكن الوصول إلى كل عنصر من خلال الفهرس الخاص به. الفهرس في الـ Tuple يبدأ من 0، مما يعني أن العنصر الأول في الـ Tuple هو الذي يحمل الفهرس 0.

  • إمكانية التكرار: يمكن للـ Tuple أن يحتوي على نفس العنصر أكثر من مرة، ويمكن الوصول إليه باستخدام فهرس مكرر.

  • إمكانية احتواء عناصر متعددة الأنواع: يمكن للـ Tuple أن يحتوي على أنواع بيانات مختلفة، مثل الأرقام، النصوص، القوائم، وحتى الـ Tuple نفسه.

  • قابلية التفكيك (Unpacking): يمكن تفكيك (أو فصل) عناصر الـ Tuple في متغيرات متعددة في وقت واحد باستخدام ميزة التفكيك.

3. كيفية تعريف الـ Tuple في بايثون

تعريف الـ Tuple في بايثون بسيط للغاية، ويمكن استخدامه مباشرة عبر الأقواس الدائرية () أو عبر وضع الفواصل بين العناصر. إليك بعض الأمثلة:

مثال 1: تعريف Tuple يحتوي على أرقام

python
numbers = (10, 20, 30, 40)

مثال 2: تعريف Tuple يحتوي على نصوص

python
fruits = ("apple", "banana", "cherry")

مثال 3: تعريف Tuple يحتوي على أنواع بيانات مختلطة

python
mixed = (1, "hello", 3.14, True)

مثال 4: Tuple فارغ

python
empty_tuple = ()

مثال 5: Tuple يحتوي على عنصر واحد

من الضروري أن تحتوي الـ Tuple التي تحتوي على عنصر واحد على فاصلة بعد العنصر. هذا يشير إلى أنها Tuple وليست مجرد قوسين عاديين:

python
single_element_tuple = (42,)

4. الوصول إلى عناصر الـ Tuple

يمكن الوصول إلى عناصر الـ Tuple باستخدام الفهرس، تمامًا مثل القوائم. يتم استخدام الفهرس للانتقال إلى العناصر داخل الـ Tuple. يُلاحظ أن الفهرس يبدأ من 0 في بايثون. إليك مثالًا:

python
my_tuple = (10, 20, 30, 40) print(my_tuple[0]) # النتيجة: 10 print(my_tuple[2]) # النتيجة: 30

الوصول باستخدام الفهرس السلبي

يمكن الوصول إلى العناصر أيضًا باستخدام الفهرس السلبي، والذي يبدأ من -1 (الذي يشير إلى آخر عنصر في الـ Tuple). هذا مفيد عندما نريد الوصول إلى العناصر الأخيرة من الـ Tuple دون الحاجة إلى حساب طول الـ Tuple:

python
print(my_tuple[-1]) # النتيجة: 40 print(my_tuple[-2]) # النتيجة: 30

5. تعديل الـ Tuple

من أهم الخصائص التي تميز الـ Tuple عن القوائم هي الثبات، مما يعني أنه لا يمكن تعديل محتويات الـ Tuple بعد إنشائه. على سبيل المثال، محاولة تعديل أحد عناصر الـ Tuple ستؤدي إلى خطأ:

python
my_tuple = (10, 20, 30) my_tuple[1] = 50 # سيؤدي إلى خطأ: TypeError: 'tuple' object does not support item assignment

لكن يمكن إعادة بناء الـ Tuple من خلال إنشاء Tuple جديد باستخدام العمليات المعينة.

6. دمج الـ Tuples

بخلاف القوائم التي تسمح بإضافة أو حذف العناصر بشكل مباشر، يمكن دمج الـ Tuples مع بعضها البعض بسهولة باستخدام عملية الجمع +:

python
tuple1 = (1, 2, 3) tuple2 = (4, 5, 6) result = tuple1 + tuple2 print(result) # النتيجة: (1, 2, 3, 4, 5, 6)

7. تكرار الـ Tuple

يمكنك تكرار محتويات الـ Tuple باستخدام عملية الضرب *. إليك مثالًا:

python
my_tuple = (1, 2, 3) result = my_tuple * 3 print(result) # النتيجة: (1, 2, 3, 1, 2, 3, 1, 2, 3)

8. تفكيك الـ Tuple (Tuple Unpacking)

يعد تفكيك الـ Tuple أحد الميزات المفيدة في بايثون، حيث يمكن تحويل محتويات الـ Tuple إلى متغيرات منفصلة بكل سهولة. إليك مثالًا:

python
my_tuple = (1, 2, 3) a, b, c = my_tuple print(a) # النتيجة: 1 print(b) # النتيجة: 2 print(c) # النتيجة: 3

كما يمكن استخدام التفكيك مع الـ Tuples المتداخلة:

python
nested_tuple = ((1, 2), (3, 4)) (a, b), (c, d) = nested_tuple print(a, b) # النتيجة: 1 2 print(c, d) # النتيجة: 3 4

9. العمليات على الـ Tuple

الـ Tuple يتيح مجموعة من العمليات مثل العد و البحث عن وجود عنصر داخله:

  • العد: يمكنك عد عدد مرات تكرار عنصر معين في الـ Tuple باستخدام الدالة count:

python
my_tuple = (1, 2, 3, 1, 4, 1) print(my_tuple.count(1)) # النتيجة: 3
  • البحث عن عنصر: يمكنك التحقق مما إذا كان عنصر معين موجودًا في الـ Tuple باستخدام العامل in:

python
print(2 in my_tuple) # النتيجة: True print(5 in my_tuple) # النتيجة: False

10. مقارنة الـ Tuples

يمكن مقارنة الـ Tuples فيما بينها باستخدام العمليات المقارنة المعتادة في بايثون. المقارنة تتم بناءً على ترتيب العناصر داخل الـ Tuple، فإذا كانت العناصر متساوية في الترتيب والقيمة، فإن الـ Tupleين سيكونان متساويين.

python
tuple1 = (1, 2, 3) tuple2 = (1, 2, 3) tuple3 = (4, 5, 6) print(tuple1 == tuple2) # النتيجة: True print(tuple1 == tuple3) # النتيجة: False

11. تطبيقات عملية للـ Tuple

تُستخدم الـ Tuples في بايثون في مجموعة واسعة من التطبيقات العملية. أحد الاستخدامات الشائعة هو إرجاع قيم متعددة من الدوال. يمكن للدالة أن تُرجع مجموعة من القيم باستخدام الـ Tuple، مما يسمح للمبرمج بتمثيل نتائج متعددة بطريقة منسقة.

مثال:

python
def min_max(numbers): return (min(numbers), max(numbers)) result = min_max([10, 20, 30, 40, 50]) print(result) # النتيجة: (10, 50)

كما أن الـ Tuple يُستخدم بكثرة في التعامل مع البيانات الثابتة، مثل تمثيل المواقع الجغرافية أو الأبعاد الهندسية.

12. الختام

تُعتبر